Skip to main content

CCS811

Escrito por Felipe Namour. Última atualização: 15/08/2022

É um sensor para detectar niveís de CO2, ele é I2C, e aqui vamos conectar e usar ele em uma Odroid XU4 apenas para pegar o valor de ppm de CO2 do ambiente

CCS8111

Conexão

Para fazer a conexão do sensor, fazemos da seguinte forma:

Pino VCC no pino 29 (1.8V)

Pino GND no pino 28 (GND)

Pino SCL no pino 14 (I2C_1.SCL)

Pino SDA no pino 16 (I2C_1.SDA)

Pino WAK no pino 2 (GND)

O pinout da Odroid XU4:

Pinout da ODROID

Código

O código é dividido em dois scripts, o primeiro, start.sh tem a função de iniciar o sensor, ou seja, tirar ele do bootmode e colocar no modo de medição a cada 1s.

Para isso precisamos primeiro ler o registrador de status(0x00), e fazemos isso assim:

i2cget -y 0 0x5a 0x00;

Caso inicie sem erro, ele retornará 0x10

Agora para tirar o sensor do boot mode, mandamos um valor vazio para ser escrito no registrador de start(0xF4):

i2cset -y -a 0 0x5a 0xF4 c;

Após isso precisamos setar o modo de funcionamento no registrador measurement mode(0x01):

i2cset -y -a 0 0x5a 0x01 0x10;

Assim, teremos nosso sensor realizando as medidas e colocando as em valor de ppm ja calculada no registrador 0x03

Para retornarmos esses valores medidos utilizamos um script em python para ser integrável mais facilmente com outros códigos, mas de mesma forma, utilizamos comandos da biblioteca i2c-tools, oque para utilizarmos em python fazemos uso da biblioteca subprocess

Exemplo:

import subprocess
rawData = subprocess.Popen("i2cget -y 0 0x5a 0x03 w;", shell=True, stdout=subprocess.PIPE).stdout).read().decode()

Para retirarmos os valores de PPM de CO2 do sensor, acessamos o registrador 0x03, porém lemos 2 bytes ao invéz de 4 utilizando o "mode word(w)":

i2cget -y 0 0x5a 0x03 w;

tendo isso, precisamos ordenar os bits da seguinte forma:

b4b3b2b1 b3b4b1b2

Assim, é so realizar a transformação de hexadecimal para decimal e teremos o valor de PPM de CO2

Referências